package eSchool.DataLayer;

import eSchool.BL.CriteriosPesquisa;
import eSchool.BL.Docente;
import eSchool.BL.Docentes;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class AccessDocenteDAO implements IDocenteDAO {

    private Connection connection = null;

    public AccessDocenteDAO() {
    // initialization 

    }

    public int insertDocente(Docente docente) throws Exception {
        Connection con = connection;
        int resultado = -1;

        if (con == null) {
            con = AccessDAOFactory.createConnection();
        }

        String sqlIns = "Insert into DocFunc ( idDocFunc, nomeDocFunc, moradaDocFunc, codPostalDocFunc, localidadeDocFunc, sexoDocFunc, emailDocFunc, telefoneDocFunc, obsDocFunc, idTipoDocFunc)";
        sqlIns += " values (?,?,?,?,?,?,?,?,?,?)";
        PreparedStatement pst = con.prepareStatement(sqlIns);
        pst.setInt(1, docente.getIdDocente());
        pst.setString(2, docente.getNome());
        pst.setString(3, docente.getMorada());
        pst.setString(4, docente.getCodPostal());
        pst.setString(5, docente.getLocalidade());
        pst.setString(6, docente.getSexo());
        pst.setString(7, docente.getEmail());
        pst.setString(8, docente.getTelefone());
        pst.setString(9, docente.getObs());
        pst.setInt(10, 1);   // O idTipoDocFunc é 1 para Docente e 2 para Funcionario      

        resultado = pst.executeUpdate();

        if (connection == null) {
            con.close();
            con = null;
        }

        return resultado;
    }

    public boolean deleteDocente(Docente docente) throws Exception {
        // Implement delete customer here
        // Return true on success, false on failure
        return true;
    }

    public boolean updateDocente(Docente docente) throws Exception {
        Connection con = connection;

        if (con == null) {
            con = AccessDAOFactory.createConnection();
        }

        String sqlUpd = " Update DocFunc SET  " +
                " nomeDocFunc = ?, " +
                " moradaDocFunc = ?, " +
                " codPostalDocFunc = ?, " +
                " localidadeDocFunc = ?, " +
                " sexoDocFunc = ?, " +
                " emailDocFunc = ?, " +
                " telefoneDocFunc = ?, " +
                " obsDocFunc = ? " +
                " WHERE idDocFunc = ?";

        PreparedStatement pst = con.prepareStatement(sqlUpd);
        pst.setString(1, docente.getNome());
        pst.setString(2, docente.getMorada());
        pst.setString(3, docente.getCodPostal());
        pst.setString(4, docente.getLocalidade());
        pst.setString(5, docente.getSexo());
        pst.setString(6, docente.getEmail());
        pst.setString(7, docente.getTelefone());
        pst.setString(8, docente.getObs());
        pst.setInt(9, docente.getIdDocente());

        pst.executeUpdate();

        if (connection == null) {
            con.close();
            con = null;
        }

        return true;
    }

    public Docentes selectDocenteTO(CriteriosPesquisa criterio) throws Exception {
        
        Docentes docentes= new Docentes();
        
        return selectDocenteTO(docentes, criterio);
    }
    
    public Docentes selectDocenteTO(Docentes docentes, CriteriosPesquisa criterio) throws Exception {
        Connection con = connection;
        Docente docente = null;
     
        if (con == null) {
            con = AccessDAOFactory.createConnection();
        }

        String sqlSlct = " SELECT idDocFunc, nomeDocFunc, moradaDocFunc, codPostalDocFunc, localidadeDocFunc, sexoDocFunc, emailDocFunc, telefoneDocFunc, obsDocFunc, idTipoDocFunc " +
                                         " FROM DocFunc" +
                                         " WHERE idTipoDocFunc = 1";
        

        PreparedStatement pst = con.prepareStatement(sqlSlct);
        
        ResultSet rs = pst.executeQuery();
        
        while (rs.next()) {
            docente = new Docente();
            docente.setIdDocente(rs.getInt("idDocFunc"));
            docente.setNome(rs.getString("nomeDocFunc"));
            docente.setMorada(rs.getString("moradaDocFunc"));
            docente.setCodPostal(rs.getString("codPostalDocFunc"));
            docente.setLocalidade(rs.getString("localidadeDocFunc"));
            docente.setSexo(rs.getString("sexoDocFunc"));
            docente.setEmail(rs.getString("emailDocFunc"));
            docente.setTelefone(rs.getString("telefoneDocFunc"));            
            docente.setObs(rs.getString("obsDocFunc"));            
            docentes.add(docente);
        }
        
        rs.close();
                
        if (connection == null) {
            con.close();
            con = null;
        }
        
        return docentes;
    }

    public Docente findDocente(int idDocente) throws Exception {
        Docente docente = null;
        
        findDocente(docente, idDocente);
        
        return docente;
    }
    
    
     public Docente findDocente(Docente docente, int idDocente) throws Exception {
        Connection con = connection;
        
        if (con == null) {
            con = AccessDAOFactory.createConnection();
        }

        String sqlSlct = " SELECT idDocFunc, nomeDocFunc, moradaDocFunc, codPostalDocFunc, localidadeDocFunc, sexoDocFunc, emailDocFunc, telefoneDocFunc, obsDocFunc, idTipoDocFunc " +
                " From DocFunc" +
                " WHERE idDocFunc = ?";

        PreparedStatement pst = con.prepareStatement(sqlSlct);
        pst.setInt(1,idDocente);

        ResultSet rs = pst.executeQuery();
        
        while (rs.next()) {
            docente.setIdDocente(rs.getInt("idDocFunc"));
            docente.setNome(rs.getString("nomeDocFunc"));
            docente.setMorada(rs.getString("moradaDocFunc"));
            docente.setCodPostal(rs.getString("codPostalDocFunc"));
            docente.setLocalidade(rs.getString("localidadeDocFunc"));           
            docente.setSexo(rs.getString("sexoDocFunc"));
            docente.setEmail(rs.getString("emailDocFunc"));
            docente.setTelefone(rs.getString("telefoneDocFunc"));
            docente.setObs(rs.getString("obsDocFunc"));            
        }
        
        rs.close();
                
        if (connection == null) {
            con.close();
            con = null;
        }
       
        return docente;
    }
}
